<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>1_类的基本知识</title>
</head>
<body>

    <script type="text/javascript">
        /*
            总结：
                1. 类中的构造器不是必须写的，要对实例进行一些初始化的操作，如添加只多功能属性时才写。
                2. 如果A类继承了B类，且A类中写了构造器，那么A类构造器中的super是必须要调用的。
                3. 类中所以定义的方法，都是放在了类的原型对象上，供实例去使用。
        */
       
        //创建一个Person类
        class Person{
            constructor(name,age){
                //构造器中的this是谁？ -- 类的实例对象
                this.name = name;
                this.age = age;
            }

            speak(){
                //speak方法放在了哪里？ -- 类的原型对象上，供实例使用
                //通过Person实例调用speak时，speak中的this就是Person实例
                console.log(`我叫${this.name},我${this.age}岁`)
            }
        }
        
        //创建一个Student类，继承于Person类
        class Student extends Person{
            constructor(name,age,grade){
                super(name,age)
                this.grade = grade
                this.school = '尚硅谷'
            }
            
            //重写从父类继承过来的方法
            speak(){
                console.log(`我叫${this.name},我${this.age}岁，我读${this.grade}年级`)
            }
        }

        class Car{
            constructor(name,price){
                this.name = name;
                this.price = price;
                // this.wheel = 4
            }
            //类中可以直接写赋值语句，如下代码的含义是：给Car的实例对象添加一个属性
            a = 4;

            demo = 100
        }


        // const p1 = new Person('Tyler',18);
        // const s1 = new Student('Tyler',28,'高三')
        // console.log(s1)
        // s1.speak()

        const c1 = new Car('宝马1系', 200)
        const c2 = new Car('奔驰3系',300)
        console.log(c1)
        console.log(c2)
        console.log(c2.demo)
    </script>
</body>
</html>